package com.iman.Confucius.service.student;

import java.util.List;
import java.util.Map;

import com.iman.Confucius.dto.RemarkStudyTimeDto;
import com.iman.Confucius.mappers.models.DrmCourse;
import com.iman.Confucius.mappers.models.DrmCourseCategory;
import com.iman.Confucius.mappers.models.DrmStudyRemark;
import com.iman.Confucius.vo.CategReferencesVo;
import com.iman.Confucius.vo.CommentVo;
import com.iman.Confucius.vo.CourseClassmateVo;
import com.iman.Confucius.vo.CourseCtgVo;
import com.iman.Confucius.vo.CourseNoteVo;
import com.iman.Confucius.vo.CourseTeacherVo;
import com.iman.Confucius.vo.CourseVo;
import com.iman.Confucius.vo.ExamVo;
import com.iman.Confucius.vo.HomeworkVo;
import com.iman.Confucius.vo.ResourceVo;
import com.iman.Confucius.vo.StudyCourseVo;
import com.iman.Confucius.vo.student.StudyDmsgVo;
import com.iman.Confucius.vo.student.StudyRemarkVo;
import com.iman.common.support.Page;

/**
 * @description 我的课程Service层接口
 * @author huangt
 * @date 2014年12月24日
 */
public interface CourseService {
	
	//固定内容，用来存放所有学员学习的记录的主  key
	public static String  REMARK_STUDENT_STUDY_MAP_MAINKEY = "remark:student:study:map:mainkey";

	/**
	 * @description 获得所有课程列表
	 * @param map
	 * @return Page<CourseVo>
	 * @throws Exception 
	 * @author huangt  2014年12月24日
	 */
	public Page<CourseVo> getAllCourseList(Map<String, Object> map) throws Exception;
	
	
	/**
	 * 
	 *  Function:
	 *  功能说明：获取公开课内容 ，
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年11月18日 下午11:13:51
	 *	返回类型: Page<CourseVo>    
	 *  @param map
	 *  @return
	 *  @throws Exception
	 */
	public Page<CourseVo> getAllPublicCourseList(Map<String, Object> map) throws Exception;
	
	
	/**
	 * @description 根据ID获得教师信息
	 * @param id
	 * 			教师ID
	 * @return CourseTeacherVo
	 * @throws Exception 
	 * @author huangt  2015年1月4日
	 */
	public CourseTeacherVo getCourseTeacherById(long id) throws Exception;
	
	/**
	 * @description 根据类型获得课程列表
	 * @param map
	 * @return Page<CourseVo>
	 * @throws Exception 
	 * @author huangt  2014年12月25日
	 */
	public Page<CourseVo> getCourseListByType(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得专题课程的课程列表
	 * @param map
	 * @return Page<CourseVo>
	 * @throws Exception 
	 * @author huangt  2014年12月26日
	 */
	public Page<CourseVo> getTopicCourseList(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课程课件列表
	 * @param map
	 * @return Page<CourseCtgVo>
	 * @throws Exception 
	 * @author huangt  2014年12月26日
	 */
	public Page<CourseCtgVo> getCourseCtgList(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课时作业列表
	 * @param map
	 * @return Page<HomeworkVo>
	 * @throws Exception 
	 * @author huangt  2014年12月30日
	 */
	public Page<HomeworkVo> getCtgHomework(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课时考试列表
	 * @param map
	 * @return Page<ExamVo>
	 * @throws Exception 
	 * @author huangt  2014年12月30日
	 */
	public Page<ExamVo> getCtgExam(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课时资源列表
	 * @param map
	 * @return Page<ResourceVo>
	 * @throws Exception 
	 * @author huangt  2014年12月31日
	 */
	public Page<ResourceVo> getCtgResource(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课程笔记列表
	 * @param map
	 * @return Page<CourseNoteVo>
	 * @throws Exception 
	 * @author huangt  2014年12月26日
	 */
	public Page<CourseNoteVo> getCourseNoteList(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课程同学列表
	 * @param map
	 * @return Page<CourseClassmateVo>
	 * @throws Exception 
	 * @author huangt  2014年12月29日
	 */
	public Page<CourseClassmateVo> getCourseClassmateList(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 获得课程评论列表
	 * @param map
	 * @return Page<CommentVo>
	 * @throws Exception 
	 * @author huangt  2014年12月29日
	 */
	public Page<CommentVo> getCourseCommentList(Map<String, Object> map) throws Exception;
	
	/**
	 * @description 根据课件获得资源列表
	 * @param map
	 * @return Page<ResourceVo>
	 * @throws Exception 
	 * @author huangt  2015年1月4日
	 */
	public Page<ResourceVo> getCourseResList(Map<String, Object> map) throws Exception;
	
	
	public Page<CategReferencesVo> getCourseeferencesList(Map<String, Object> map) throws Exception;
	
	/**
	 * 
	 *  Function: getStudyingCourseList
	 *  功能说明：获取用户当前正在学习的课程列表
	 *	 使用说明：
	 *  @author  Lihuai  DateTime Dec 24, 2014-11:28:22 PM
	 *	返回类型: Page<CourseVo>    
	 *  @param 
	 *  @return Page<CourseVo>
	 */
	public Page<StudyCourseVo> getStudyingCourseList(Long userId);
	/**
	 * @description 获得所有学习动态消息表
	 * @param map
	 * @return Page<StudyDmsgVo>
	 * @throws Exception 
	 * @author syd  2014年12月28日
	 */
	Page<StudyDmsgVo> getAllStudyDmsgList(Map<String, Object> map)
			throws Exception;
	/**
 	 * @description 获得user所有学习动态消息表
 	 * @param map
 	 * @return Page<StudyRemarkVo>
 	 * @throws Exception 
 	 * @author syd  2014年12月29日
 	 */
	Page<StudyRemarkVo> getStudyRemarkList(Map<String, Object> map)
			throws Exception;
	
	
	/**
	 *  获取课程数据的  原始数据
	 *  Function:
	 *  功能说明：
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年1月25日 下午10:00:54
	 *	返回类型: DrmCourse    
	 *  @return
	 */
	DrmCourse  getCouserById(long  courseId);
	
	/**
	 *  Function:
	 *  功能说明： 判断如果是过程话学习的话，根据进度， 判断  是否可以学习下一个 课件
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年1月25日 下午11:09:08
	 *	返回类型: Integer    
	 *  @param map
	 *  @return
	 */
	Integer  	canStudyNextCategory(Map<String,Object> map);
	
	
	/**
	 *  
	 *  Function:
	 *  功能说明： 学习的时候生成要安全的KEY
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年1月25日 下午11:39:09
	 *	返回类型: String    
	 *  @param key
	 *  @param value
	 *  @return
	 */
	String    studyKey(String key ,String  value);
	
	/**
	 * 
	 *  Function:
	 *  功能说明：判断学习课件的safekey是否存在可以继续学习
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年4月20日 下午10:39:10
	 *	返回类型: boolean    
	 *  @param key
	 *  @return
	 */
	boolean  exsitStudyKey(String key);
	
	/**
	 * 
	 *  Function:
	 *  功能说明：根据ID 获取 课件
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年4月20日 下午10:46:51
	 *	返回类型: DrmCourseCategory    
	 *  @param id
	 *  @return
	 */
	DrmCourseCategory getCourseCategoryById(String id);
	
	
	/**
	 * 
	 *  Function:
	 *  功能说明：
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月10日 上午9:59:31
	 *	返回类型: boolean    
	 *  @param value
	 *  @return
	 */
	boolean  setRemarkStudentStudyTime(Map <String,String> value);
	
	/**
	 * 
	 *  Function:
	 *  功能说明：
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月10日 上午9:59:28
	 *	返回类型: Map<String,String>    
	 *  @return
	 */
	Map <String,String> getRemarkStudentStudyTime();
	
	/**
	 * 
	 *  Function:
	 *  功能说明：
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月10日 上午9:59:24
	 *	返回类型: DrmStudyRemark    
	 *  @param dto
	 *  @return
	 */
	DrmStudyRemark  getStudentStudymark(RemarkStudyTimeDto dto);

	/**
	 * 
	 *  Function:
	 *  功能说明：更新学习的记录时间和  学习记录
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月10日 上午9:59:20
	 *	返回类型: DrmStudyRemark    
	 *  @return
	 */
	boolean  updateDrmStudyRemark(DrmStudyRemark remarkold  ,DrmStudyRemark remarknew  ,String courseName,String categrotyName,String username);
	
	/**
	 * 获取推荐课程
	 * @return
	 */
	public  List<Map<String, String>> getCourseTop5();

	public boolean addCourseComment(CommentVo cv);
}
